Переходим к плану лекции. Сегодня рассмотрим четыре крупных блока: задачи ОС, организация файловых систем, файловые операции и контроль доступа. Это позволит сформировать целостное представление о работе файловых систем.
Файловая система — один из самых-visible компонентов ОС. Каждый пользователь сталкивается с ней ежедневно. Здесь важно подчеркнуть, что ФС скрывает сложность физического хранения за простым интерфейсом.
Начинаем первый раздел. Обратите внимание: ОС берёт на себя всю работу по управлению файлами — от создания до физического размещения на диске. Без ОС приложению пришлось бы работать с диском напрямую.
Дисковое пространство — конечный ресурс. ОС должна эффективно выделять и освобождать блоки, чтобы избежать фрагментации и обеспечить возможность роста файлов.
Безопасность и целостность — критичные аспекты. Журналирование, о котором мы поговорим позже, позволяет восстановить ФС после внезапного отключения питания без потери данных.
Производительность ФС напрямую влияет на восприятие системы пользователем. Кэширование — один из ключевых механизмов: данные читаются из оперативной памяти, а не с медленного диска.
Современные системы работают с самыми разными носителями: от классических жёстких дисков до SSD и сетевых хранилищ. ОС предоставляет единый интерфейс, абстрагируясь от аппаратных особенностей каждого устройства.
Подсистема ввода-вывода — мост между файловыми операциями и аппаратурой. Буферизация позволяет накапливать данные и выполнять операции более эффективными порциями.
Переходим ко второму разделу. Важно понимать разницу: логическая организация — это то, что видит пользователь, а физическая — как данные реально расположены на диске.
Иерархическая структура — стандарт де-факто. Обратите внимание на разницу между Unix и Windows: Unix использует единое корневое дерево, а Windows — отдельные деревья для каждого диска.
Правила именования различаются между файловыми системами. Например, FAT32 не различает регистр, а ext4 — различает. Расширения файлов — условность, не гарантия типа содержимого.
Атрибуты хранятся в метаданных файла и позволяют ОС и приложениям получать информацию о файле без чтения его содержимого. Тип файла определяет, как ОС с ним работает.
Том — логическая единица, которую можно форматировать в любую ФС. Суперблок содержит критически важную информацию: если он повреждён, вся файловая система становится недоступной.
Переходим к физической организации. Блок — это атомарная единица обмена между диском и ОС. Выбор размера блока — компромисс: большие блоки уменьшают накладные расходы, но увеличивают потери места.
Непрерывное размещение — исторически первый метод. Аналогия: как комнаты в гостинице, идущие подряд. Просто и быстро, но со временем диск фрагментируется и новые файлы некуда разместить.
Связанное размещение решает проблему фрагментации: блоки могут быть где угодно. Но чтобы прочитать конец файла, нужно пройти всю цепочку — это медленно. Аналогия: квест по подсказкам.
Индексированное размещение — компромисс. Индексный блок работает как оглавление: зная номер нужного блока, можно сразу перейти к нему. Это стандарт для современных ФС — ext4, NTFS, APFS.
Сводная таблица наглядно показывает, почему индексированное размещение стало стандартом. Непрерывное почти не используется в чистом виде, а связанное — основа FAT32.
Два основных подхода к учёту свободного места. Битовые карты компактны и позволяют быстро найти连续ные свободные блоки. Связанные списки экономят память, но сложнее в поиске连续ных областей.
Метаданные — «нервный центр» файловой системы. Суперблок читается при монтировании ФС. В Unix для повышения надёжности суперблок копируется в нескольких местах на диске.
FAT32 — классика, всё ещё встречается на флешках и SD-картах благодаря совместимости. Ограничение в 4 ГБ на файл делает её непригодной для современных задач: даже один видеофайл может превышать этот лимит.
NTFS — основная ФС Windows. Журналирование обеспечивает восстановление после сбоев: ОС записывает планируемые операции и может откатить незавершённые. EFS и сжатие — дополнительные преимущества.
ext4 — рабочая лошадка Linux. Отложенное выделение блоков позволяет ОС оптимизировать размещение, накапливая запросы и выделяя непрерывные области. Обратная совместимость с ext2/ext3 облегчает миграцию.
APFS — современная ФС Apple, созданная специально для SSD и флэш-памяти. Copy-on-Write позволяет мгновенно копировать файлы без реального дублирования данных. Snapshots используются в Time Machine.
Сводная таблица для сравнения. Обратите внимание: FAT32 не имеет журналирования — при сбое выше риск потери данных. APFS технически поддерживает самый большой размер файла, хотя практический лимит определяется другими факторами.
Третий раздел — файловые операции. Это системные вызовы, через которые приложения взаимодействуют с файлами. Create, Open, Read — базовые операции, без которых не обходится ни одна программа, работающая с файлами.
Write и Seek дополняют базовые операции. Seek особенно важен: он позволяет перемещаться внутри файла, не закрывая и не открывая его заново. Это основа произвольного доступа к данным.
Close — не менее важен, чем Open. Несзакрытый файл удерживает дескриптор и может блокировать удаление. Delete не всегда немедленно удаляет данные — пока файл открыт, блоки на диске сохраняются.
Атрибуты хранятся отдельно от содержимого файла — в inode или MFT-записи. Получить атрибуты можно без чтения самого файла, что значительно быстрее, особенно для больших файлов.
Жизненный цикл файла — от создания до удаления. Важный момент: дескриптор файла — ограниченный ресурс. Если забывать закрывать файлы, можно исчерпать лимит дескрипторов на процесс.
Дескриптор — целое число, но за ним стоит вся мощь ОС. В Linux лимит по умолчанию — 1024 дескриптора на процесс. Для серверов этот лимит обычно увеличивают, так как каждый сетевой соединение тоже consumes дескриптор.
Четвёртый раздел — контроль доступа. Без механизмов разграничения прав любой пользователь мог бы прочитать или удалить чужие файлы. Это основа многопользовательской безопасности.
ACL — наиболее гибкая модель. Можно дать конкретному пользователю или группе определённые права, не меняя базовую категорию «остальные». Это необходимо в корпоративных средах с тонкой настройкой доступа.
Классическая модель Unix — три категории и три типа прав. Восьмеричная запись компактна: 7 = rwx, 6 = rw-, 5 = r-x и так далее. Это основа, которую нужно знать наизусть.
Конкретный пример: rwxr-xr-- = 754. Владелец может всё, группа может читать и выполнять, остальные — только читать. Покажите, как каждая тройка символов переводится в восьмеричную цифру.
RBAC удобен в корпоративных системах: вместо назначения прав каждому пользователю определяются роли. Пользователь получает права через назначение роли, что упрощает администрирование при большом количестве сотрудников.
Практические инструменты управления правами. chmod — основной инструмент в Unix. Можно использовать как восьмеричную запись (755), так и символьную (u+x). setfacl — для управления ACL-записями.
Специальные биты — мощный механизм с потенциалом для уязвимостей. SUID позволяет выполнить программу с правами владельца: именно так работает sudo. Sticky bit на /tmp предотвращает удаление чужих файлов в общем каталоге.
umask — фильтр, который определяет, какие права убираются при создании файла. Значение 022 означает: для владельца — все права, для группы и остальных — убирается запись. Это защищает от случайного создания файлов, доступных для записи всем.
Подводим итоги. Файловые системы — это сложный баланс между производительностью, надёжностью и безопасностью. Не существует идеальной ФС — каждая оптимизирована под свои задачи.
Ключевые тезисы лекции на двух колонках. Обратите особое внимание на индексированное размещение и модели контроля доступа — это темы, которые часто встречаются в экзаменационных вопросах.
Вопросы для самопроверки. Рекомендую разобрать каждый вопрос самостоятельно — это отличный способ закрепить материал. Особое внимание уделите вопросам 3, 7 и 10, они требуют синтеза информации из нескольких слайдов.
Рекомендуемая литература для углублённого изучения. Таненбаум — классика, глава 4 подробно разбирает файловые системы. Столлингс даёт альтернативный взгляд. Для практики с Unix-системами крайне рекомендуется Стивенс.